A traditional computer system has a processor that, on start up can retrieve code and data from memory devices such as a ROM chip and such code can dictate how the processor operates. A portion of this code and data can be placed in cache memory (fast efficient expensive memory proximate to the core of the processor) and the system can “boot up” on this retrieved code. When a system boots up it loads and executes code that controls basic operational functions. Part of this code is commonly referred to as a basic input output system or (BIOS). Generally, BIOS is built-in software that dictates how a processor interfaces with other systems and subsystems and dictates what the processor can do without accessing executable programs or applications from a disk.
For example, on personal computers, the BIOS can contain all of the code required to control and interface the keyboard, display screen, disk drives, serial communication ports, and a number of miscellaneous functions such as house keeping functions (basic configurable functions). The BIOS can run as part of the startup sequence where the BIOS can configure devices and locate and load or “boot” the operating system. The function of the BIOS is important and often the information on the BIOS is stored in a non-volatile memory (NVM) such as read only memory (ROM) on an integrated circuit. NVM is typically separate from the other memory systems such as the hard drive to keep the BIOS sheltered from memory failures that are common for “non solid state” memory devices. For example, a hard disk can “crash” or fail and if the BIOS was on the disk the system could not be revived without an undue burden.
NVM such as ROM chips are relatively expensive and a major focus has been placed on increasing performance of such devices and reducing the cost of such devices. NOR type flash memory has gained in popularity because it is a relatively inexpensive type of memory and NOR memory has been utilized to store operating system code namely BIOS code. NAND has not been utilized due to the inherent drawbacks in such a memory type. For example, NAND flash type memory has a slower read access time than other memory topologies such as NOR memory. Also, when a location in NAND memory is read multiple times, the charge held by the memory cells or in the transistor gate of the cell that represents the stored value, can be depleted or disturbed leading to system failures. Further, “over-read” sectors or overused portions of memory can fail or wear out leading to bad sectors in the memory. Thus, uniform distribution of memory usage can lead to higher reliability and longer memory life.
In addition, NAND based memory has a non-linear interface, where the stored code cannot be directly addressable by the processor. Thus, due to these shortcomings and others NAND type memory has not been utilized for storing BIOS code and operating system code. Instead NAND type memory has typically been utilized in devices such as uniform serial bus type “drives” or as storage for application software and application data. It can be appreciated that production cost for NAND flash type memory are approximately half the production costs for NOR type memory and NAND memory is more compact.